<?php
require_once $_SERVER[DOCUMENT_ROOT].'/clientes/src/lib/db/ConnectionDB.php';

class Usuario{
	
	//----------------------------------------------------------------------------
	//Constantes
	//----------------------------------------------------------------------------
	const ARTISTA = "artista";
	const EMPRESARIO = "empresario";
	
	//----------------------------------------------------------------------------
	//Delimitador de la tabla
	//----------------------------------------------------------------------------
	
	/**
	 * El constrains de la clase
	 */
	private static $table_name = "usuario";
	private static $constrains = array(	array("id",			ConnectionDB::INT,			ConnectionDB::NOT_NULL, ConnectionDB::PRIMARY_KEY,	ConnectionDB::NO_DEFAULT_VALUE),	//El id
										array("email",		ConnectionDB::STRING_NAME,	ConnectionDB::NOT_NULL, ConnectionDB::NONE_KEY ,	ConnectionDB::NO_DEFAULT_VALUE),	//El email
										array("contrasenia",ConnectionDB::STRING_NAME,	ConnectionDB::NOT_NULL, ConnectionDB::NONE_KEY,		ConnectionDB::DEFAULT_VALUE),		//La contrasenia
                                        array("nombre",		ConnectionDB::STRING_NAME,	ConnectionDB::NOT_NULL, ConnectionDB::NONE_KEY ,	ConnectionDB::DEFAULT_VALUE),       //El email
										array("apellidos",  ConnectionDB::STRING_NAME,	ConnectionDB::NOT_NULL, ConnectionDB::NONE_KEY,		ConnectionDB::DEFAULT_VALUE),		//La contrasenia
										array("tipo",		ConnectionDB::STRING_NAME,	ConnectionDB::NOT_NULL,	ConnectionDB::NONE_KEY,		ConnectionDB::DEFAULT_VALUE),
                                        array("id_perfil",	ConnectionDB::STRING_NAME,	ConnectionDB::NOT_NULL,	ConnectionDB::NONE_KEY,		ConnectionDB::DEFAULT_VALUE));		//El tipo

	//----------------------------------------------------------------------------
	//Atributos
	//----------------------------------------------------------------------------								
	
	/**
	 * Id del Usuario
	 */
	private $id;
	
	/**
	 * Email del usuario
	 */
	private $email;
	
	/**
	 * Contrasenia del usuario
	 */
	private $contrasenia;

    	/**
	 * Nombre del usuario
	 */
	private $nombre;

	/**
	 * Apellidos del usuario
	 */
	private $apellidos;

	/**
	 * Tipo de Usuario
	 */
	private $tipo;

    	/**
	 * Tipo de Usuario
	 */
	private $id_perfil;
	
	/**
	 * V�nculo con la Tabla en la Base de Datos
	 */	
	private $table;

    /**
	 * V�nculo con la Tabla en la Base de Datos
	 */
	private $connection_DB;
	
	//----------------------------------------------------------------------------
	//M�todo constructor
	//----------------------------------------------------------------------------
	
	public function __construct($id = 0, $email = "", $contrasenia = "", $nombre = "", $apellidos = "",$tipo = "", $id_perfil = 0){
		$this->id = $id;
		$this->email = $email;
		$this->contrasenia = $contrasenia;
        $this->nombre = $nombre;
        $this->apellidos = $apellidos;
		$this->tipo = $tipo;
        $this->id_perfil = $id_perfil;

		//Realiza lo debido a la base de datos
		$connection = new ConnectionDB($_SESSION['USER_NAME'],$_SESSION['USER_PASS']);
		$this->table = $connection->get_table(Usuario::$table_name, Usuario::$constrains);
        $this->connection_DB = $connection;
	}
	
	//----------------------------------------------------------------------------
	//Getters y Setters B�sicos de la Clase
	//----------------------------------------------------------------------------

	/**
	 * Retorna el Id de la instancia
	 */
	public function get_id(){
		return $this->id;
	}

    /**
	 * Retorna el Id del perfil
	 */
	public function get_id_perfil(){
		return $this->id_perfil;
	}
	
	/**
	 * Retorna el e-mail del usuario
	 */
	public function get_email(){
		return $this->email;
	}
	
	/**
	 * Retorna la contrasenia del usuario
	 */
	public function get_contrasenia(){
		return $this->contrasenia;
	}

    	/**
	 * Retorna el nombre del usuario
	 */
	public function get_nombre(){
		return $this->nombre;
	}

	/**
	 * Retorna los apellidos del usuario
	 */
	public function get_apellidos(){
		return $this->apellidos;
	}


	/**
	 *Retorna el tipo de Usuario
	 */
	public function get_tipo(){
		return $this->tipo;
	}
	
	/**
	 * Modifica el e-mail del usuario
	 */
	public function set_email($email){
		$this->email = $email;
	}
	
	/**
	 * Modifica la contrasenia del usuario
	 */
	public function set_contrasenia($contrasenia){
		$this->contrasenia = $contrasenia;
	}

    /**
	 * Modifica el e-mail del usuario
	 */
	public function set_tipo($tipo){
		$this->tipo = $tipo;
	}

	/**
	 * Modifica la contrasenia del usuario
	 */
	public function set_nombre($nombre){
		$this->nombre = $nombre;
	}
	
	/**
	 * Modifica el tipo de usuario
	 */
	public function set_apellidos($apellidos){
		$this->apellidos = $apellidos;
	}

    /**
	 * Modifica el id del perfil del usuario
	 */
	public function set_id_perfil($id_perfil){
		$this->id_perfil = $id_perfil;
	}
	
	//----------------------------------------------------------------------------
	//Busqueda en la Base de Datos
	//----------------------------------------------------------------------------
	
	public static function search_by_email($email){
		$usuario = new Usuario();
		
		$params = array(array("email",$email));
		$response_id = 	$usuario->table->get_value_by_field("id", $params);
		
		$answer = array();
		
		foreach($response_id as $i => $value){
			$user = new Usuario($response_id[$i]);
			$user->update_from_database_by_id();
			
			$answer[] = $user;
		}
		return $answer;
	}
	
	public static function search_in_nombre($param)
	{
		$query = "SELECT id FROM usuario WHERE nombre LIKE '%".$param."%' ORDER BY nombre";
		
		$usuario = new Usuario();
		
		$result = $usuario->connection_DB->get_query($query);
		$answer = array();
		
		foreach($result as $i => $value)
		{
			$user = new Usuario($value[0]);
			$user->update_from_database_by_id();
					
			$answer[] = $user;
		}
		return $answer;
	}
	
	public static function search_in_email($param)
	{
		$query = "SELECT id FROM usuario WHERE email LIKE '%".$param."%' ORDER BY nombre";
		
		$usuario = new Usuario();
		$result = $usuario->connection_DB->get_query($query);
		$answer = array();
		
		foreach($result as $i => $value)
		{
			$user = new Usuario($value[0]);
			$user->update_from_database_by_id();
			
			$answer[] = $user;
		}
		return $answer;
	}
	
	public static function search_in_apellidos($param)
	{
		$query = "SELECT id FROM usuario WHERE apellidos LIKE '%".$param."%' ORDER BY nombre";
		
		$usuario = new Usuario();
		$result = $usuario->connection_DB->get_query($query);
		$answer = array();
		
		foreach($result as $i => $value)
		{
			$user = new Usuario($value[0]);
			$user->update_from_database_by_id();
			
			$answer[] = $user;
		}
		return $answer;
	}
    
	//----------------------------------------------------------------------------
	//Actualizaci�n con la Base de Datos
	//----------------------------------------------------------------------------
	
	/**
	 * Actualiza la informaci�n en la Base de Datos
	 */
	public function update_database(){
		$params = array(array("email",	$this->email));
		$this->table->update($params);
		$this->id = $this->table->get_id();

		$parametros = array(	array("contrasenia",$this->contrasenia),
                                array("nombre",		$this->nombre),
                                array("apellidos",  $this->apellidos),
                                array("tipo",       $this->tipo),
                                array("id_perfil",	$this->id_perfil)
                            );
		$this->table->update_by_id($this->id,$parametros);
	}
	
	/**
	 * Actualiza la informaci�n desde la Base de Datos seg�n el id
	 */
	public function update_from_database_by_id(){
		$params = array(array("id",$this->id));
		
		//Toma los valores
		$email =        $this->table->get_value_by_field("email",	$params);
		$contrasenia = 	$this->table->get_value_by_field("contrasenia",	$params);
		$tipo =         $this->table->get_value_by_field("tipo",	$params);
        $nombre =       $this->table->get_value_by_field("nombre",	$params);
		$apellidos =    $this->table->get_value_by_field("apellidos",	$params);
        $id_perfil =    $this->table->get_value_by_field("id_perfil",	$params);
		
		$this->email = $email[0];		
		$this->contrasenia = $contrasenia[0];
		$this->tipo = $tipo[0];
        $this->apellidos = $apellidos[0];
		$this->nombre = $nombre[0];
        $this->id_perfil = $id_perfil[0];
	}
}
?>